<template>
  <div class="app-container">
    <el-card class="box-card" >
      <div slot="header" class="clearfix">
        <span class="el-icon-document">已办任务</span>
        <el-button style="float: right;" size="small" type="danger" @click="goBack">关闭</el-button>
      </div>
      <el-tabs  tab-position="top" v-model="activeName" @tab-click="handleClick">
        <!--表单信息-->
        <el-tab-pane label="表单信息" name="1">
          <el-col :span="16" :offset="4">
              <ProcessInstanceTimeline :activity-nodes="activityNodes" />
          </el-col>
        </el-tab-pane>
        <!--流程流转记录-->
        <el-tab-pane label="流转记录" name="2">
          <el-table :data="taskList" border header-cell-class-name="table-header-gray">
    <el-table-column label="审批节点" prop="name" min-width="120" align="center" />
    <el-table-column label="审批人" min-width="100" align="center">
      <template #default="scope">
        {{ scope.row.assigneeUser?.userName || scope.row.ownerUser?.userName }}
      </template>
    </el-table-column>
    <el-table-column
      :formatter="dateFormatter"
      align="center"
      label="开始时间"
      prop="createTime"
      min-width="140"
    />
    <el-table-column
      :formatter="dateFormatter"
      align="center"
      label="结束时间"
      prop="endTime"
      min-width="140"
    />
    <el-table-column align="center" label="审批状态" prop="status" min-width="90">
      <template #default="scope">
        <dict-tag :options="bpm_task_status" :value="scope.row.status" />
      </template>
    </el-table-column>
    <el-table-column align="center" label="审批建议" prop="reason" min-width="200">
      <template #default="scope">
        {{ scope.row.reason }}
        <el-button
          class="ml-10px"
          size="small"
          v-if="scope.row.formId > 0"
          @click="handleFormDetail(scope.row)"
        >
          查看表单
        </el-button>
      </template>
    </el-table-column>
    <el-table-column align="center" label="耗时" prop="durationInMillis" min-width="100">
      <template #default="scope">
        {{ formatPast2(scope.row.durationInMillis) }}
      </template>
    </el-table-column>
  </el-table>
        </el-tab-pane>
        <el-tab-pane label="流程图" name="3">
          <ProcessInstanceBpmnViewer
                :loading="processInstanceLoading"
                :model-view="processModelView"
              />          
        </el-tab-pane>
      </el-tabs>
    </el-card>
  </div>
</template>

<script setup name="Record" >
import { dateFormatter, formatPast2 } from '@/utils/formatTime'
import {flowRecord} from "@/api/flowable/finished";
import {getProcessVariables, flowXmlAndNode} from "@/api/flowable/definition";

import ProcessInstanceTimeline from '../../../processInstance/detail/ProcessInstanceTimeline';
import ProcessInstanceBpmnViewer from '../../../processInstance/detail/ProcessInstanceBpmnViewer.vue'
//import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import 'vue3-treeselect/dist/vue3-treeselect.css'
import {
  getTaskListByProcessInstanceId,

} from "@/api/flowable/todo";
import {getApprovalDetail,getProcessInstanceBpmnModelView} from "@/api/flowable/instance";
    const { proxy } = getCurrentInstance();
    const { bpm_task_status } = proxy.useDict("bpm_task_status");
    const route = useRoute();
    const taskList=ref([]);//流程任务的数组
      // 模型xml数据
    const  flowData=ref( {})
    const  activeName=ref( '1')
      // 查询参数
    const  queryParams=ref( {
        deptId: undefined
      })
    const processInstanceLoading = ref(false)
    const processModelView = ref({});
    const  activityNodes=ref([]);
      // 遮罩层
    const  loading=ref( true)
    const  flowRecordList=ref( []) // 流程流转数据
    const  taskForm=reactive({
        multiple: false,
        comment:"", // 意见内容
        procInsId: "", // 流程实例编号
        instanceId: "", // 流程实例编号
        deployId: "",  // 流程定义编号
        taskId: "" ,// 流程任务编号
        procDefId: "",  // 流程编号
        vars: "",
      })
    
  
function  created() {
    taskForm.deployId = route.query && route.query.deployId;
    taskForm.taskId  = route.query && route.query.taskId;
    taskForm.procInsId = route.query && route.query.procInsId;
    // 流程任务重获取变量表单
   TaskListByProcessInstanceId(taskForm.procInsId);
   ApprovalDetail(taskForm.procInsId)
  
  }
    function ApprovalDetail(procInsId, deployId) {
     
      const params = {processInstanceId: procInsId, deployId: deployId}
      getApprovalDetail(params).then(res => {
        activityNodes.value=res.data.activityNodes
        console.log("getApprovalDetail",activityNodes.value)
      }).catch(res => {
        this.goBack();
      })
    }
      //流程任务的数组
   function  TaskListByProcessInstanceId(procInsId) {
      getTaskListByProcessInstanceId(procInsId).then(res => {
       
        taskList.value = res.data;
      }).catch(res => {
        goBack();
      })
    };

  function  handleClick(tab, event) {
      if (tab.props.name === '3') {
        getProcessInstanceBpmnModelView(taskForm.procInsId).then(res=>{
        processModelView.value = res.data;
        console.log("www",processModelView)
      })
      }
    }
 function   setIcon(val) {
      if (val) {
        return "el-icon-check";
      } else {
        return "el-icon-time";
      }
    }
 function   setColor(val) {
      if (val) {
        return "#2bc418";
      } else {
        return "#b3bdbb";
      }
    }

    /** 获取流程变量内容 */
  function  processVariables(taskId) {
      if (taskId) {
        // 提交流程申请时填写的表单存入了流程变量中后续任务处理时需要展示
        getProcessVariables(taskId).then(res => {
          // 回显表单
          this.$nextTick(() => {
            this.$refs.vFormRef.setFormJson(res.data.formJson);
            this.$nextTick(() => {
              // 加载表单填写的数据
              this.$refs.vFormRef.setFormData(res.data);
              this.$nextTick(() => {
                // 表单禁用
                this.$refs.vFormRef.disableForm();
              })
            })
          })
        });
      }
    }
    /** 返回页面 */
  function  goBack() {
      // 关闭当前标签页并返回上个页面
      const obj = { path: "/task/finished", query: { t: Date.now()} };
      proxy.$tab.closeOpenPage(obj);
    }
  
    created()
</script>
<style lang="scss" scoped>
.test-form {
  margin: 15px auto;
  width: 800px;
  padding: 15px;
}

.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both
}

.box-card {
  width: 100%;
  margin-bottom: 20px;
}

.el-tag + .el-tag {
  margin-left: 10px;
}

.my-label {
  background: #E1F3D8;
}
</style>
